// 导入用户服务模块，处理用户相关的业务逻辑
const userService = require("../services/userService");

/**
 * 获取所有用户
 * 支持分页、状态筛选和关键词搜索
 * @param {Object} req - Express请求对象，包含查询参数
 * @param {Object} res - Express响应对象，用于返回结果
 * @param {Function} next - 传递错误到下一个中间件
 */
exports.getAllUsers = async (req, res, next) => {
  try {
    // 从查询参数中获取分页信息，默认第1页，每页10条
    const page = req.query.page || 1;
    const limit = req.query.limit || 10;

    // 构建筛选条件（状态和搜索关键词）
    const filters = {
      status: req.query.status, // 状态筛选（如：active/inactive）
      search: req.query.search, // 关键词搜索（可能匹配用户名、邮箱等）
    };

    // 调用用户服务获取用户列表及分页信息
    const result = await userService.findAllUsers(page, limit, filters);

    // 返回成功响应，包含用户数据和分页信息
    res.json({
      code: 200, // 状态码：成功
      msg: "成功", // 响应消息
      data: result.users, // 用户列表数据
      pagination: result.pagination, // 分页信息（总条数、总页数等）
    });
  } catch (error) {
    // 捕获错误并传递给错误处理中间件
    next(error);
  }
};

/**
 * 根据ID获取单个用户详情
 * @param {Object} req - Express请求对象，包含URL参数id
 * @param {Object} res - Express响应对象，用于返回结果
 * @param {Function} next - 传递错误到下一个中间件
 */
exports.getUserById = async (req, res, next) => {
  try {
    // 调用用户服务根据ID查询用户
    const user = await userService.findUserById(req.params.id);

    // 返回成功响应，包含用户详情
    res.json({
      code: 200,
      msg: "成功",
      data: user,
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 创建新用户
 * @param {Object} req - Express请求对象，包含请求体中的用户信息
 * @param {Object} res - Express响应对象，用于返回结果
 * @param {Function} next - 传递错误到下一个中间件
 */
exports.createUser = async (req, res, next) => {
  try {
    // 调用用户服务创建新用户，传入请求体中的用户数据
    const user = await userService.createUser(req.body);

    // 返回创建成功响应（201状态码表示资源创建成功）
    res.status(201).json({
      code: 201, // 状态码：创建成功
      msg: "用户创建成功", // 响应消息
      data: user, // 返回创建的用户信息
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 更新指定ID的用户信息
 * @param {Object} req - Express请求对象，包含URL参数id和请求体中的更新数据
 * @param {Object} res - Express响应对象，用于返回结果
 * @param {Function} next - 传递错误到下一个中间件
 */
exports.updateUser = async (req, res, next) => {
  try {
    // 调用用户服务更新用户，传入用户ID和更新数据
    const user = await userService.updateUser(req.params.id, req.body);

    // 返回更新成功响应
    res.json({
      code: 200,
      msg: "用户更新成功",
      data: user, // 返回更新后的用户信息
    });
  } catch (error) {
    next(error);
  }
};

/**
 * 删除指定ID的用户
 * @param {Object} req - Express请求对象，包含URL参数id
 * @param {Object} res - Express响应对象，用于返回结果
 * @param {Function} next - 传递错误到下一个中间件
 */
exports.deleteUser = async (req, res, next) => {
  try {
    // 调用用户服务删除用户，传入用户ID
    const result = await userService.deleteUser(req.params.id);

    // 返回删除成功响应
    res.json({
      code: 200,
      msg: result.message, // 返回删除操作的消息
    });
  } catch (error) {
    next(error);
  }
};
